#pragma once 
#include <iostream>
#include <assert.h>
#include <string.h>

using std::cout;
using std::cin;
using std::endl;

namespace YuShen
{
  // 堆排
  void HeapSort(int* arr, int len);
  void AdjustDown(int* arr, int len, int parent);
  // 归并排序
  void _MergeSort(int* arr, int* tmp, int begin, int end);
  void MergeSort(int* arr, int len);
  void MergeSortNoRecursive(int* arr, int len);  // 非递归实现
  // 快速排序
  void QuickSort(int* arr, int len);
  void _quickSort(int* arr, int begin, int end);
  int _quickSort1(int* arr, int begin, int end);  // 原始版本实现
  int _quickSort2(int* arr, int begin, int end);  // 挖坑版本实现
  int _quickSort3(int* arr, int begin, int end);  // 双指针版本实现
}